﻿using System.ComponentModel;

namespace WinwiseARDrone.TouchScreenClient.Core
{
    /// <summary>
    /// Représente un objet atomique.
    /// </summary>
    public abstract class BaseViewModel : INotifyPropertyChanged
    {
        #region Evénements
        
        /// <summary>
        /// Se produit lorsqu'une propriété de l'objet change.
        /// </summary>
        public event PropertyChangedEventHandler PropertyChanged;

        #endregion

        #region Constructeurs

        /// <summary>
        /// Initialise une nouvelle instance d'<c>BaseViewModel</c>.
        /// </summary>
        protected BaseViewModel()
        {
        }

        #endregion

        #region Fonctions protégées et internes

        /// <summary>
        /// Déclenche l'événement <c>PropertyChanged</c>.
        /// </summary>
        /// <param name="e">Données de l'événement.</param>
        protected internal virtual void OnPropertyChanged(PropertyChangedEventArgs e)
        {
            if (this.PropertyChanged != null)
                this.PropertyChanged(this, e);
        }

        /// <summary>
        /// Déclenche l'événement <c>PropertyChanged</c>.
        /// </summary>
        /// <param name="propertyName">Nom de la propriété ayant changée.</param>
        protected internal void OnPropertyChanged(string p_sPropertyName)
        {
            this.OnPropertyChanged(new PropertyChangedEventArgs(p_sPropertyName));
        }

        #endregion
    }
}
